# -*- makefile -*- for the C-level run-time support for SBCL

# This software is part of the SBCL system. See the README file for
# more information.
#
# This software is derived from the CMU CL system, which was
# written at Carnegie Mellon University and released into the
# public domain. The software is in the public domain and is
# provided with absolutely no warranty. See the COPYING and CREDITS
# files for more information.

CFLAGS += -g -Wall -fdollars-in-identifiers -arch arm64

OS_SRC = bsd-os.c arm64-bsd-os.c darwin-os.c arm64-darwin-os.c

OS_LIBS = -lc -ldl
ifdef LISP_FEATURE_SB_THREAD
  OS_LIBS += -lpthread
endif

ifdef LISP_FEATURE_SB_CORE_COMPRESSION

ifneq (,$(wildcard /opt/homebrew/lib))
  export LIBRARY_PATH := ${LIBRARY_PATH}:/opt/homebrew/lib/
  export CPATH := ${CPATH}:/opt/homebrew/include/
endif

  OS_LIBS += -lzstd
endif

ifdef LISP_FEATURE_SB_LINKABLE_RUNTIME
  LIBSBCL = libsbcl.a
  USE_LIBSBCL = -Wl,-force_load libsbcl.a
endif

ASSEM_SRC = arm64-assem.S
ARCH_SRC = arm64-arch.c

LINKFLAGS += -dynamic -twolevel_namespace -arch arm64

CFLAGS += -fno-omit-frame-pointer
DISABLE_PIE=no

ifdef LISP_FEATURE_IMMOBILE_SPACE
  GC_SRC = fullcgc.c gencgc.c traceroot.c immobile-space.c
else ifdef LISP_FEATURE_MARK_REGION_GC
# The parallelized mark-region collector can perform a full GC,
# but can't use fullcgc to perform heap->arena pointer detection.
  GC_SRC = fullcgc.c pmrgc.c traceroot.c mark-region.c incremental-compact.c gc-thread-pool.c
else
  GC_SRC = fullcgc.c gencgc.c traceroot.c
endif
